package com.base.cn.platform.os.entity.exam.question;

import com.base.cn.platform.os.common.annotation.ImgAttr;
import com.base.cn.platform.os.common.mybatis.BaseEntity;
import com.base.cn.platform.os.common.utils.ObjectUtils;
import com.base.cn.platform.os.common.utils.StringUtils;
import com.base.cn.platform.os.entity.exam.template.ExamQuestionTemplate;
import com.base.cn.platform.os.entity.exam.template.TemplateContent;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.Data;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/**
 * 试题实体
 *
 * @author s.li
 * @date 2018/11/22
 */
@Data
public class ExamQuestion extends BaseEntity {
    /**试题模板ID*/
    private Integer templateId;
    /**题型模板类型记录ID*/
    private BigDecimal templateRecordId;
    /**试题内容*/
    @ImgAttr
    private String content;
    /**试题总分数（必须是整数）*/
    private Integer score;
    /**试题分数JSON*/
    private String scoreJson;
    /**试题答案内容*/
    private String questionAnswer;
    /**知识点ID串，通过知识体系选择知识点*/
    private String loresetPointIds;
    /**试题难度 1.简单 2.中等 3.困难*/
    private Integer difficulty;
    /**是否是真题 ，1是，2否*/
    private Integer oldExam;
    /**试题年份*/
    private Integer year;
    /**组卷专用。1.是 2.否*/
    private Integer onlyPaper;
    /**是否包含有简答题，0不包含，1包含*/
    private Integer special;

    /**
     * status 试题状态 0.未发布 1.已发布 2.已禁用 3.已删除
     */

    /**试题分数JSON对象*/
    private QuestionScoreJson questionScoreJson;
    /**试题内容模板*/
    private TemplateContent templateContent;
    /**试题类型模板对象*/
    private ExamQuestionTemplate questionTemplate;
    // 知识体系数据
    private Map<String, String> loresetDataMap;
    /**试题类型名*/
    private String templateName;

    /**
     * 转换内容数据
     * @param content
     */
    public void fromJson(String content){
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
        try {
            content = URLDecoder.decode(content,"utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        TemplateContent templateContent = gson.fromJson(content,TemplateContent.class);
        this.setTemplateContentHtml(templateContent);
        if(templateContent.isHaveSubTrunk()){
            List<TemplateContent> subTrunkList = templateContent.getSubTrunkList();
            subTrunkList.forEach(e->{
                this.setTemplateContentHtml(e);
            });
        }

        this.setTemplateContent(templateContent);
    }

    /**
     * 转换分数JSON串
     * @param scoreJson
     */
    public void fromScoreJson(String scoreJson){
        if(StringUtils.isNotEmpty(scoreJson)){
            Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
            try {
                scoreJson = URLDecoder.decode(scoreJson,"utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            this.setQuestionScoreJson(gson.fromJson(scoreJson,QuestionScoreJson.class));
        }
    }

    /**
     * 设置试题模板数据HTML内容
     * @param content
     */
    private void setTemplateContentHtml(TemplateContent content){
        //题干的图片列表
        List<String> trunkImgList = StringUtils.getImages(content.getTrunk());
        content.setTrunkImgList(trunkImgList);

        //单选、多选、判断
        if(content.isSingle() || content.isMulti() || content.isJudge()){
            //处理选项内容
            List<TreeMap<String,String>>  optionContextList = content.getOptionContextList();
            List<TreeMap<String,List<String>>> optionImgList = new ArrayList<>();
            if(ObjectUtils.isNotEmpty(optionContextList)){
                optionContextList.forEach(option->{
                    String key = option.get("key");
                    String value = option.get("value");
                    TreeMap<String,List<String>> imgMap = new TreeMap<>();
                    List<String> optImgList = StringUtils.getImages(value);
                    imgMap.put(key,optImgList);
                    optionImgList.add(imgMap);
                });
            }
            content.setOptionImgList(optionImgList);
        }

        if(content.isSpecial()){
            //答案题的答案图片List
            List<String> specialAnswerImgList = StringUtils.getImages(content.getSpecialAnswer());
            content.setSpecialAnswerImgList(specialAnswerImgList);
        }

        //解析内容的图片列表
        List<String> analyzeImgList = StringUtils.getImages(content.getAnalyzeContext());
        content.setAnalyzeImgList(analyzeImgList);
    }
}
